package back_0413.lbservice.server;

//import io.netty.handler.codec.http.HttpHeaders.Values;
//import static io.netty.handler.codec.http.HttpHeaders.Names.*;

/**
 * Auth: bruce-sha
 * Date: 2015/3/6
 */
public class HttpServerInboundHandler/* extends ChannelInboundHandlerAdapter*/ {

//    private Optional<List<String>> parametersFromGet(String paramName, QueryStringDecoder query) {
//        final Map<String, List<String>> params = query.parameters();
//        return Optional.ofNullable(params.get(paramName));
//    }
//
//    private Optional<String> parametersFromPost(String paramName, String body) {
//        QueryStringDecoder decoderQuery = new QueryStringDecoder(body, false);
//        return parameterFromUri(decoderQuery, paramName);
//    }
//
//    private Optional<String> parameterFromUri(QueryStringDecoder query, String paramName) {
//        final Map<String, List<String>> params = query.parameters();
//        if (!params.containsKey(paramName))
//            return Optional.empty();
//        else
//            return Optional.ofNullable(params.get(paramName).iterator().next());
//    }
//
//    private void writeHttpResponse(ChannelHandlerContext ctx, HttpResponseStatus status, String responseString) {
//        ByteBuf content = Unpooled.wrappedBuffer(responseString.getBytes(Charsets.UTF_8));
//        FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, status, content);
//
//        response.headers().set(CONTENT_TYPE, "application/json");
//        response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
//        response.headers().set(EXPIRES, 0);
////        if (HttpHeaders.isKeepAlive(request)) {
//        response.headers().set(CONNECTION, Values.KEEP_ALIVE);
////        }
//        ctx.write(response);
//        ctx.flush();
//    }
//
//
//    // http://sae.sina.com.cn/doc/php/counter.html
//    // 纯接口的调用：（参考sina）
//    // 的
//    // d
//    private static void setContentTypeHeader(HttpResponse response, File file) {
//        String type = null;// Files.getMimeType(file);
//        type = "application/javascript";
//        response.headers().set(CONTENT_TYPE, type);
//    }
//
//    public static final String HTTP_DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz";
//    public static final String HTTP_DATE_GMT_TIMEZONE = "GMT";
//    public static final int HTTP_CACHE_SECONDS = 1800;
//
//    private static void setDateAndCacheHeaders(HttpResponse response, File fileToCache) {
//        SimpleDateFormat dateFormatter = new SimpleDateFormat(HTTP_DATE_FORMAT, Locale.US);
//        dateFormatter.setTimeZone(TimeZone.getTimeZone(HTTP_DATE_GMT_TIMEZONE));
//
//        Calendar time = new GregorianCalendar();
//        response.headers().set(DATE, dateFormatter.format(time.getTime()));
//
//        time.add(Calendar.SECOND, HTTP_CACHE_SECONDS);
//        response.headers().set(EXPIRES, dateFormatter.format(time.getTime()));
//        response.headers().set(CACHE_CONTROL, "private, max-age=" + HTTP_CACHE_SECONDS);
////        response.headers().set(
////                LAST_MODIFIED, dateFormatter.format(new Date(fileToCache.lastModified())));
//    }
//
//    String inputStream2String(InputStream is) {
//        try {
//            BufferedReader in = new BufferedReader(new InputStreamReader(is));
//            StringBuffer buffer = new StringBuffer();
//            String line = "";
//            while ((line = in.readLine()) != null) {
//                buffer.append(line);
//            }
//            return buffer.toString();
//        } catch (IOException e) {
//            return null;
//
//        }
//    }
//
//    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
//
//        whenTypeOf(msg).is(HttpRequest.class).then(request -> {
//            final String uri = request.getUri();
//            final QueryStringDecoder query = new QueryStringDecoder(uri);
//
//            String requestPath = query.path();
//            switch (requestPath) {
//                case "/catch":
//                case "/catch/": {
//                    String s = System.currentTimeMillis() + "<br>" + request.toString();
//                    ByteBuf content = Unpooled.wrappedBuffer(s.getBytes(Charsets.UTF_8));
//                    DefaultFullHttpResponse resp = new DefaultFullHttpResponse(HTTP_1_1, OK, content);
//                    resp.headers().set(CONTENT_TYPE, "text/html;charset=UTF-8");
//                    resp.headers().set(CONTENT_LENGTH, content.readableBytes());//must
//                    ctx.writeAndFlush(resp);
//                    return;
//                }
//                case "/now": {
//                    String s = "hello @ " + System.currentTimeMillis() + "<br>";
//
//                    LocalDateTime totalBegin = LocalDateTime.of(2014, 11, 4, 0, 0, 0, 0);
//                    long totalDays = ChronoUnit.DAYS.between(totalBegin, LocalDateTime.now());
//
//                    LocalDateTime floorBegin = LocalDateTime.of(2015, 2, 4, 0, 0, 0, 0);
//                    long floorDays = ChronoUnit.DAYS.between(floorBegin, LocalDateTime.now());
//
//                    Period p = Period.between(totalBegin.toLocalDate(), LocalDate.now());
//                    Period p2 = Period.between(floorBegin.toLocalDate(), LocalDate.now());
//
//                    s += "总：" + totalDays + p.toString() + "<br>地：" + floorDays + p2.toString();
//
//                    ByteBuf content = Unpooled.wrappedBuffer(s.getBytes(Charsets.UTF_8));
//                    DefaultFullHttpResponse resp = new DefaultFullHttpResponse(HTTP_1_1, OK, content);
//                    resp.headers().set(CONTENT_TYPE, "text/html;charset=UTF-8");
//                    resp.headers().set(CONTENT_LENGTH, content.readableBytes());//must
//                    ctx.writeAndFlush(resp);
//                    return;
//                }
//                case "":
//                case "/": {
//                    request.setUri(request.getUri() + "index.html");
//                }
//                case "/index.html":
//                case "/counter/index.html": {
//                    back_041311.busuanzi.server.StaticHanlder.bath(ctx, request);
//                    return;
//                }
//                case "/counter/":
//                case "/counter": {
//                    break;
//                }
//                case "/counter/busuanzi.mini.js": {
//                    back_041311.busuanzi.server.StaticHanlder.bath(ctx, request);
//                    return;
//                }
//                case "/t.txt":
//                case "/logo.png":
//                case "/main.png":
//                case "/favicon.ico": {
//                    back_041311.busuanzi.server.StaticHanlder.bath(ctx, request);
//                    return;
//                }
//                default: {
//                    if (requestPath.endsWith(".html") ||
//                            requestPath.endsWith(".css") ||
//                            requestPath.endsWith(".js"))
//                        back_041311.busuanzi.server.StaticHanlder.bath(ctx, request);
//                    else
//                        writeHttpResponse(ctx, NON_AUTHORITATIVE_INFORMATION, "i got u !");
//                    return;
//                }
//            }
//
//            String referer = request.headers().get("referer");
//
//            if (referer == null) return;
//            String host = null, path = null;
//
//            try {
//                URL u = new URL(referer);
//                System.out.println("host = " + (host = u.getHost()));
//                System.out.println("path = " + (path = u.getPath()));
//
//            } catch (MalformedURLException e) {
//                e.printStackTrace();
//            }
//
//            // 创建连接
//            Jedis jedis = new Jedis("127.0.0.1", 6379);
//            jedis.connect();
//            jedis.auth("buru.redis");
//            // 操作数据库
////            jedis.set("ibruce.info", "0");
//
//
////            long counter = jedis.incr("ibruce.info");
//
//
////            System.out.println(referer);
////            QueryStringDecoder q = new QueryStringDecoder(referer + "?d=1");
////            System.out.println(q.uri());
////            System.out.println(q.path());
//
//            // xxx
////            System.out.println(HttpHeaders.getHost(request));
//
//            // 如何获取host
//
//
//            Optional<String> jsonpCallback = parameterFromUri(query, "jsonpCallback");
//            if (!jsonpCallback.isPresent()) return;
//
////            Optional<String> k = parameterFromUri(query, "k");
//
////            int kv = Integer.valueOf(k.orElse("0"));
//
//            Double pageCounter = -1D;
//            Double siteCounter = -1D;
//
//            siteCounter = jedis.zincrby(host, 1.0, host);
//            if (!(Strings.isNullOrEmpty(path) || "/".equals(path)))
//                pageCounter = jedis.zincrby(host, 1.0, path);
//            else
//                pageCounter = siteCounter;
//
//
////            switch (kv) {
////                case 1://counter_value_page 文章页（不显示站点总数）
////                    //page++  siteCOunter++
////                {
////                    pageCounter = jedis.zincrby(host, 1.0, path);
////                    siteCounter = jedis.zincrby(host, 1.0, host);
////                    break;
////                }
////                case 2://counter_value_site  首页
////                    //siteCOunter++
////                {
////                    siteCounter = jedis.zincrby(host, 1.0, host);
////                    break;
////                }
////                case 3://counter_value_page + counter_value_site 文章页
////                    //page++  siteCOunter++
////                {
////                    pageCounter = jedis.zincrby(host, 1.0, path);
////                    siteCounter = jedis.zincrby(host, 1.0, host);
////                    break;
////                }
////
////                default://0 啥都不干
////                    return;
////            }
//
//            JSON.toJSONString(Maps.newHashMap());
//
//            String json = String.format("{\"page\": %s,\"site\": %s }", pageCounter.intValue(), siteCounter.intValue());
//            String res = String.format("try{%s(%s);}catch(e){}", jsonpCallback.get(), json);
//
//            writeHttpResponse(ctx, OK, res);
//
//        }).is(HttpContent.class).then(content -> {
//            ByteBuf buf = content.content();
//            String bodyString = buf.toString(Charsets.UTF_8);
//
//            Optional<String> l = parametersFromPost("hello", bodyString);
//
//            buf.release();
//        });
//    }
//
//    @Override
//    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
//        super.channelReadComplete(ctx);
//        ctx.flush();
//    }
//
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
//        ctx.close();
//    }
}